// yarn init 或 npm inti
// yarn add express 或 npm add express
// 引入 express
const express = require('express')
const cors = require('cors')

// 创建 app 实例对象
const app = express()
// 使用中间件解析 urlencoded 编码形式的请求体参数
app.use(express.urlencoded({extended: true}))
// 使用中间件解析 json 编码形式的请求体参数
app.use(express.json())
app.use(cors())


// 暴露静态资源
app.use(express.static(__dirname + '/src'))

// 响应 GET 请求---query参数
app.get('/test_get', (request, response) => {
    console.log('有人请求了test_get了--携带的 query 参数是：', request.query)
    response.send('hello_test_get12aaa')
})

// 响应 GET 请求---params参数
app.get('/test_get2/:name/:age', (request, response) => {
    console.log('有人请求了test_get2了--携带的 params 参数是：', request.params)
    response.send('hello_test_get22222')
})

// 响应 GET 请求
app.get('/get_person', (request, response) => {
    console.log('有人请求了get_person了')
    const person = {name: '软柠柠', age: 18, sex: '男'}
    response.send(JSON.stringify(person))
    // response.send('hello')
})

// 响应 GET 请求
app.get('/get_person_delay', (request, response) => {
    console.log('有人请求了get_person_delay了')
    const person = {name: '软柠柠', age: 18, sex: '男'}
    setTimeout(() => {
        response.send(JSON.stringify(person))
    }, 3000)
})

// 响应 GET 请求---jQuery
app.get('/test_jquery_get', (request, response) => {
    console.log('有人请求了test_jquery_get了', request.query)
    const car = {name: '小毛驴', price: '12k'}
    response.send(JSON.stringify(car))
})

// 响应 GET 请求---jsonp
app.get('/test_jsonp', (request, response) => {
    console.log('有人请求了test_jquery_get了', request.query)
    const {callback} = request.query
    const person = {name: '软柠柠吖', age: 12}
    response.send(`${callback}(${JSON.stringify(person)})`)
})

// 响应 GET 请求---cors
app.get('/test_cors', (request, response) => {
    console.log('有人请求了test_cors了', request.query)
    // 解决跨域问题：Access-Control-Allow-Origin
    response.setHeader('Access-Control-Allow-Origin', '*')
    // 暴露所有响应头
    response.setHeader('Access-Control-Expose-Headers', '*')
    response.send('hello test_cors')
})

// 响应 POST 请求---请求体参数（query参数、params参数都可以，写法和GET请求一样，但是不常用）
// POST 常用的还是：请求体参数
app.post('/test_post', (request, response) => {
    console.log('有人请求了test_post了--携带的 请求体 参数是：', request.body)
    response.send('hello_test_post')
})

// 响应 POST 请求---jQuery
app.post('/test_jquery_post', (request, response) => {
    console.log('有人请求了test_jquery_post了--携带的 请求体 参数是：', request.body)
    const car = {name: '小毛驴', price: '12k'}
    response.send(JSON.stringify(car))
})

// 响应 options 请求
app.options('/test_put', (request, response) => {
    // 解决跨域问题：Access-Control-Allow-Origin
    response.setHeader('Access-Control-Allow-Origin', '*')
    // 暴露所有响应头
    response.setHeader('Access-Control-Expose-Headers', '*')
    response.setHeader('Access-Control-Allow-Methods', '*')
    response.send()
})

// 响应 PUT 请求
app.put('/test_put', (request, response) => {
    // 解决跨域问题：Access-Control-Allow-Origin
    response.setHeader('Access-Control-Allow-Origin', '*')
    // 暴露所有响应头
    response.setHeader('Access-Control-Expose-Headers', '*')
    response.send('hello test_put')
})


// 监听
app.listen(8080, (err) => {
    if (!err) console.log('测试 Ajax 请求的服务器开启成功了！')
})

// 启动服务器：node server.js
// 实时监测：nodemon server.js


